package com.dm.service;

import com.jacob.activeX.ActiveXComponent;

public interface WindowService {
	/**
	 * 把窗口坐标转换为屏幕坐标 
	 * @param hwnd  
	 * 			整形数: 指定的窗口句柄
	 * @param x 
	 * 			窗口X坐标
	 * @param y
	 * 			窗口Y坐标
	 * @return
	 * 			整形数:0: 失败 1: 成功
	 */
	long clientToScreen(int hwnd, int x,int y, ActiveXComponent acComponent);
	/**
	 * 根据指定条件,枚举系统中符合条件的窗口
	 * @param parent
	 * 				获得的窗口句柄是该窗口的子窗口的窗口句柄,取0时为获得桌面句柄
	 * @param title
	 * 				窗口标题. 此参数是模糊匹配.
	 * @param className
	 * 				窗口类名. 此参数是模糊匹配.
	 * @param filter
	 * 				取值定义如下
	 * 				1 : 匹配窗口标题,参数title有效 
	 * 				2 : 匹配窗口类名,参数class_name有效.
	 * 				4 : 只匹配指定父窗口的第一层孩子窗口
	 * 				8 : 匹配所有者窗口为0的窗口,即顶级窗口
	 * 				16 : 匹配可见的窗口
	 * 				32 : 匹配出的窗口按照窗口打开顺序依次排列 <收费功能，具体详情点击查看>
	 * 				这些值可以相加,比如4+8+16就是类似于任务管理器中的窗口列表
	 * @return
	 * 				返回所有匹配的窗口句柄字符串,格式"hwnd1,hwnd2,hwnd3"
	 */
	String enumWindow(int parent, String title, String className,int filter, ActiveXComponent acComponent);
	/**
	 * 根据指定进程以及其它条件,枚举系统中符合条件的窗口,
	 * @param processName
	 * 					进程映像名.比如(svchost.exe). 此参数是精确匹配,但不区分大小写.
	 * @param title
	 * 					窗口标题. 此参数是模糊匹配.
	 * @param className
	 * 					窗口类名. 此参数是模糊匹配.
	 * @param filter
	 * 					取值定义如下
	 * 					1 : 匹配窗口标题,参数title有效
	 * 					2 : 匹配窗口类名,参数class_name有效
	 * 					4 : 只匹配指定映像的所对应的第一个进程. 可能有很多同映像名的进程，只匹配第一个进程的.
	 * 					8 : 匹配所有者窗口为0的窗口,即顶级窗口16 : 匹配可见的窗口
	 * 					32 : 匹配出的窗口按照窗口打开顺序依次排列<收费功能，具体详情点击查看>
	 * 					这些值可以相加,比如4+8+16
	 * @return
	 * 					返回所有匹配的窗口句柄字符串,格式"hwnd1,hwnd2,hwnd3"
	 */
	String enumWindowByProcess(String processName, String title, String className, int filter, ActiveXComponent acComponent);
	/**
	 * 根据两组设定条件来枚举指定窗口. <收费功能，具体详情点击查看>
	 * @param spec1
	 * 				字符串: 查找串1. (内容取决于flag1的值)
	 * @param flag1
	 * 				取值如下:
				   0表示spec1的内容是标题
				   1表示spec1的内容是程序名字. (比如notepad)
				   2表示spec1的内容是类名
				   3表示spec1的内容是程序路径.(不包含盘符,比如\windows\system32)
				   4表示spec1的内容是父句柄.(十进制表达的串)
				   5表示spec1的内容是父窗口标题
				   6表示spec1的内容是父窗口类名
				   7表示spec1的内容是顶级窗口句柄.(十进制表达的串)
				   8表示spec1的内容是顶级窗口标题
				   9表示spec1的内容是顶级窗口类名
	 * @param type1
	 *  		          取值如下
	 *  			0精确判断
	 *  			1模糊判断
	 * @param spec2
	 * 				同spec1
	 * @param flag2
	 * 				同flag1
	 * @param type2
	 * 				同type1
	 * @param sort
	 * 				取值如下
	 * 					0不排序.
	 * 					1对枚举出的窗口进行排序,按照窗口打开顺序.
	 * @return
	 * 				返回所有匹配的窗口句柄字符串,格式"hwnd1,hwnd2,hwnd3"
	 */
	String enumWindowSuper(String spec1,int flag1, int type1, String spec2,int flag2, int type2, int sort, ActiveXComponent acComponent);
	/**
	 * 查找符合类名或者标题名的顶层可见窗口
	 * @param className
	 * 				窗口类名，如果为空，则匹配所有. 这里的匹配是模糊匹配
	 * @param title
	 * 				窗口标题,如果为空，则匹配所有.这里的匹配是模糊匹配.
	 * @return
	 * 				整形数表示的窗口句柄，没找到返回0
	 */
	int findWindow(String className, String title, ActiveXComponent acComponent);
	/**
	 * 根据指定的进程名字，来查找可见窗口.  <收费功能，具体详情点击查看>
	 * @param processName
	 * 				 进程名. 比如(notepad.exe).这里是精确匹配,但不区分大小写
	 * @param className
	 * 				窗口类名，如果为空，则匹配所有. 这里的匹配是模糊匹配.	
	 * @param title
	 * 				窗口标题,如果为空，则匹配所有.这里的匹配是模糊匹配.
	 * @return
	 * 				整形数表示的窗口句柄，没找到返回0
	 */
	long findWindowByProcess(String processName,String className, String title, ActiveXComponent acComponent);
	/**
	 * 根据指定的进程Id，来查找可见窗口.  <收费功能，具体详情点击查看>
	 * @param processId
	 * 		进程id.
	 * @param className
	 * 		窗口类名，如果为空，则匹配所有. 这里的匹配是模糊匹配.
	 * @param title
	 * 		窗口标题,如果为空，则匹配所有.这里的匹配是模糊匹配.
	 * @return	
	 * 		整形数表示的窗口句柄，没找到返回0
	 */
	long findWindowByProcessId(String processId,String className,String title, ActiveXComponent acComponent);
	/**
	 * 查找符合类名或者标题名的顶层可见窗口,如果指定了parent,则在parent的第一层子窗口中查找.
	 * @param parent
	 * 		父窗口句柄，如果为空，则匹配所有顶层窗口
	 * @param className
	 * 		窗口类名，如果为空，则匹配所有. 这里的匹配是模糊匹配.
	 * @param title
	 * 		窗口标题,如果为空，则匹配所有. 这里的匹配是模糊匹配.
	 * @return
	 * 		窗口句柄，没找到返回0
	 */
	long findWindowEx(int parent,String className, String title, ActiveXComponent acComponent);
	/**
	 * 根据两组设定条件来查找指定窗口. <收费功能，具体详情点击查看>
	  * @param spec1
	 * 				字符串: 查找串1. (内容取决于flag1的值)
	 * @param flag1
	 * 				取值如下:
				   0表示spec1的内容是标题
				   1表示spec1的内容是程序名字. (比如notepad)
				   2表示spec1的内容是类名
				   3表示spec1的内容是程序路径.(不包含盘符,比如\windows\system32)
				   4表示spec1的内容是父句柄.(十进制表达的串)
				   5表示spec1的内容是父窗口标题
				   6表示spec1的内容是父窗口类名
				   7表示spec1的内容是顶级窗口句柄.(十进制表达的串)
				   8表示spec1的内容是顶级窗口标题
				   9表示spec1的内容是顶级窗口类名
	 * @param type1
	 *  		          取值如下
	 *  			0精确判断
	 *  			1模糊判断
	 * @param spec2
	 * 				同spec1
	 * @param flag2
	 * 				同flag1
	 * @param type2
	 * 				同type1
	 * @param sort
	 * 				取值如下
	 * 					0不排序.
	 * 					1对枚举出的窗口进行排序,按照窗口打开顺序.
	 * @return
	 * 				返回所有匹配的窗口句柄字符串,格式"hwnd1,hwnd2,hwnd3"
	 */
	long findWindowSuper(String spec1,int flag1,int type1,String spec2, int flag2, int type2, ActiveXComponent acComponent); 
	/**
	 * 获取窗口客户区域在屏幕上的位置
	 * @param hwnd
	 * 			窗口句柄
	 * @param x1
	 * 			返回窗口客户区左上角X坐标
	 * @param y1
	 * 			返回窗口客户区左上角Y坐标
	 * @param x2
	 * 			返回窗口客户区右下角X坐标
	 * @param y2
	 * 			返回窗口客户区右下角Y坐标
	 * @return
	 * 			0: 失败1: 成功
	 */
	long getClientRect(int hwnd, int x1, int y1, int x2, int y2, ActiveXComponent acComponent); 
	/**
	 * 获取窗口客户区域的宽度和高度
	 * @param hwnd
	 * 		指定的窗口句柄
	 * @param width
	 * 		宽度
	 * @param height
	 * 		高度
	 * @return
	 * 		0: 失败1: 成功
	 */
	long getClientSize(int hwnd, int width, int height, ActiveXComponent acComponent);
	/**
	 * 获取顶层活动窗口中具有输入焦点的窗口句柄
	 * @return
	 * 		返回整型表示的窗口句柄
	 */
	long getForegroundFocus(ActiveXComponent acComponent);
	/**
	 * 获取顶层活动窗口
	 * @return
	 * 		返回整型表示的窗口句柄
	 */
	long getForegroundWindow(ActiveXComponent acComponent);
	
	/**
	 * 获取鼠标指向的窗口句柄
	 * @return
	 * 		返回整型表示的窗口句柄
	 */
	long getMousePointWindow(ActiveXComponent acComponent);
	/**
	 * 获取给定坐标的窗口句柄
	 * @param x
	 * 		屏幕X坐标
	 * @param y
	 * 		屏幕Y坐标
	 * @return
	 */
	long getPointWindow(int x, int y, ActiveXComponent acComponent);
	/**
	 * 获取特殊窗口
	 * @param flag
	 * 		取值定义如下
				0 : 获取桌面窗口
				1 : 获取任务栏窗口
	 * @return
	 */
	long getSpecialWindow(int flag, ActiveXComponent acComponent);
	/**
	 * 获取给定窗口相关的窗口句柄
	 * @param hwnd
	 * 		窗口句柄
	 * @param flag
	 * 		取值定义如下
				0 : 获取父窗口
				1 : 获取第一个儿子窗口
				2 : 获取First 窗口
				3 : 获取Last窗口
				4 : 获取下一个窗口
				5 : 获取上一个窗口
				6 : 获取拥有者窗口
				7 : 获取顶层窗口
	 * @return
	 * 		返回整型表示的窗口句柄
	 */
	long getWindow(int hwnd,int flag, ActiveXComponent acComponent);
	/**
	 * 获取窗口的类名
	 * @param hwnd
	 * 		指定的窗口句柄
	 * @return
	 * 		窗口的类名
	 */
	String getWindowClass(int hwnd, ActiveXComponent acComponent);
	/**
	 * 获取指定窗口所在的进程ID.
	 * @param hwnd
	 * 		窗口句柄
	 * @return
	 * 		返回整型表示的是进程ID
	 */
	long getWindowProcessId(int hwnd, ActiveXComponent acComponent);
	
	/**
	 * 获取指定窗口所在的进程的exe文件全路径.
	 * @param hwnd
	 * 		窗口句柄
	 * @return
	 * 		返回字符串表示的是exe全路径名
	 */
	String getWindowProcessPath(int hwnd, ActiveXComponent acComponent); 
	/**
	 * 获取窗口在屏幕上的位置
	 * @param hwnd
	 * 		指定的窗口句柄
	 * @param x1
	 * 		返回窗口左上角X坐标
	 * @param y1
	 * 		返回窗口左上角Y坐标
	 * @param x2
	 * 		返回窗口右下角X坐标
	 * @param y2
	 * 		返回窗口右下角Y坐标
	 * @return
	 * 		0: 失败1: 成功
	 */
	long getWindowRect(int hwnd, int x1,int y1, int x2, int y2, ActiveXComponent acComponent);
	/**
	 * 获取指定窗口的一些属性
	 * @param hwnd
	 * 		指定的窗口句柄
	 * @param flag
	 * 		 取值定义如下
				0 : 判断窗口是否存在
				1 : 判断窗口是否处于激活
				2 : 判断窗口是否可见
				3 : 判断窗口是否最小化
				4 : 判断窗口是否最大化
				5 : 判断窗口是否置顶
				6 : 判断窗口是否无响应
	 * @return
	 * 		0: 不满足条件1: 满足条件
	 */
	long getWindowState(int hwnd, int flag, ActiveXComponent acComponent);
	/**
	 * 获取窗口的标题
	 * @param hwnd
	 * 		指定的窗口句柄
	 * @return
	 * 		窗口的标题
	 */
	String getWindowTitle(int hwnd, ActiveXComponent acComponent);
	/**
	 * 移动指定窗口到指定位置
	 * @param hwnd
	 * 		指定的窗口句柄
	 * @param x
	 * 		X坐标
	 * @param y
	 * 		Y坐标
	 * @return
	 * 		0: 失败1: 成功
	 */
	long moveWindow(int hwnd,int x, int y, ActiveXComponent acComponent);
	/**
	 * 把屏幕坐标转换为窗口坐标
	 * @param hwnd
	 * 		指定的窗口句柄
	 * @param x
	 * 		屏幕X坐标
	 * @param y
	 * 		屏幕Y坐标
	 * @return
	 * 		0: 失败1: 成功
	 */
	long screenToClient(int hwnd, int x, int y, ActiveXComponent acComponent);
	/**
	 * 指定窗口发送粘贴命令. 把剪贴板的内容发送到目标窗口.
	 * @param hwnd
	 * 		指定的窗口句柄
	 * @return
	 * 		0: 失败1: 成功	
	 */
	long sendPaste(int hwnd, ActiveXComponent acComponent);
	/**
	 * 向指定窗口发送文本数据
	 * @param hwnd
	 * 		指定的窗口句柄
	 * @param str
	 * 		发送的文本数据
	 * @return
	 * 		0: 失败1: 成功
	 */
	long sendString(int hwnd,String str, ActiveXComponent acComponent);
	/**
	 * 设置窗口客户区域的宽度和高度
	 * @param hwnd
	 * 		指定的窗口句柄
	 * @param width
	 * 		宽度
	 * @param height
	 * 		高度
	 * @return
	 * 		0: 失败1: 成功
	 */
	long setClientSize(int hwnd,int width,int height, ActiveXComponent acComponent);
	/**
	 * 设置窗口的大小
	 * @param hwnd
	 * 		指定的窗口句柄
	 * @param width
	 * 		宽度
	 * @param height
	 * 		高度
	 * @return
	 * 		0: 失败1: 成功
	 */
	long setWindowSize(int hwnd, int width, int height, ActiveXComponent acComponent);
	/**
	 * 设置窗口的状态
	 * @param hwnd
	 * 		指定的窗口句柄
	 * @param flag
	 * 		取值定义如下
				0 : 关闭指定窗口
				1 : 激活指定窗口
				2 : 最小化指定窗口,但不激活
				3 : 最小化指定窗口,并释放内存,但同时也会激活窗口.
				4 : 最大化指定窗口,同时激活窗口.
				5 : 恢复指定窗口 ,但不激活
				6 : 隐藏指定窗口
				7 : 显示指定窗口
				8 : 置顶指定窗口
				9 : 取消置顶指定窗口
				10 : 禁止指定窗口
				11 : 取消禁止指定窗口
				12 : 恢复并激活指定窗口
				13 : 强制结束窗口所在进程.
	 * @return
	 * 		0: 失败1: 成功
	 */
	long setWindowState(int hwnd,int flag, ActiveXComponent acComponent);
	/**
	 * 设置窗口的标题
	 * @param hwnd
	 * 		指定的窗口句柄
	 * @param title
	 * 		标题
	 * @return
	 * 		0: 失败1: 成功
	 */
	long setWindowText(int hwnd, int title, ActiveXComponent acComponent);
	/**
	 * 设置窗口的透明度
	 * @param hwnd
	 * 		指定的窗口句柄
	 * @param trans
	 * 		透明度取值(0-255) 越小透明度越大 0为完全透明(不可见) 255为完全显示(不透明)
	 * @return
	 * 		0: 失败1: 成功
	 */
	long setWindowTransparent(int hwnd,int trans, ActiveXComponent acComponent);
}
